﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Iudicium.Servicio
{

    /// <summary>
    /// Descripción breve de Servicio
    /// </summary>
    public abstract class Servicio
    {

        #region Atributos

        private int _servicioId;
        private DateTime _fechaInicio;
        private DateTime _fechaFin;
        private DateTime _fechaEntregaEstimada;
        private DateTime _fechaEntrega;
        private string _codigoServicio;
        private string  _observacion;
        private string _estado;
        private string _entregadoA;
        private string _obsercacionEntrega;

        #endregion

        #region Propiedades

        public int ServicioId
        {
            set { _servicioId = value; }
            get { return _servicioId; }
        }

        public DateTime FechaInicio
        {
            set { _fechaInicio = value; }
            get { return _fechaInicio; }
        }

        public string FechaInicioForDisplay
        {          
            get { return _fechaInicio.ToString("dd/MM/yyyy"); }
        }    

        public DateTime FechaFin
        {
            set { _fechaFin = value; }
            get { return _fechaFin; }
        }

        public DateTime FechaEntregaEstimada
        {
            set { _fechaEntregaEstimada = value; }
            get { return _fechaEntregaEstimada; }
        }

        public DateTime FechaEntrega
        {
            set { _fechaEntrega = value; }
            get { return _fechaEntrega; }
        }

        public string Observacion
        {
            set { _observacion = value; }
            get { return _observacion; }
        }

        public string Estado
        {
            set { _estado = value; }
            get { return _estado; }
        }

        public string EntregadoA
        {
            set { _entregadoA = value; }
            get { return _entregadoA; }
        }

        public string ObservacionEntrega
        {
            set { _obsercacionEntrega = value; }
            get { return _obsercacionEntrega; }
        }

        public abstract TipoServicio Tipo
        {
            get ;
        }

        public string CodigoServicio
        {
            set { _codigoServicio = value; }
            get { return _codigoServicio; }
        }

        #endregion

        public enum TipoServicio
        {
            Tramite,
            Proceso
        }

        public Servicio(int servicioId,
                        string codigoServicio,
                        DateTime fechaInicio,
                        DateTime fechaFin,
                        DateTime fechaEntregaEstimada,
                        string  observacion,
                        string estado)
        {
            this._servicioId = servicioId;
            this._codigoServicio = codigoServicio;
            this._fechaInicio = fechaInicio;
            this._fechaFin = fechaFin;
            this._fechaEntregaEstimada = fechaEntregaEstimada;
            this._observacion = observacion;
            this._estado = estado;
            this._entregadoA = "";
            this._obsercacionEntrega = "";
        }

        public static TipoServicio GetTipoServicioFromString(string tipoServicio)
        {
            if(tipoServicio.Equals(TipoServicio.Proceso.ToString()))
                return TipoServicio.Proceso;
            else
                return TipoServicio.Tramite;
        }

        public static Servicio GetNuevoServicio(TipoServicio tipo,
                                                int servicioId,
                                                string codigoServicio,
                                                DateTime fechaInicio,
                                                DateTime fechaFin,
                                                DateTime fechaEntregaEstimada,
                                                string observacion,
                                                string estado)
        {
            switch (tipo)
            {
                case TipoServicio.Proceso:
                    {
                        return new Tramite(servicioId, codigoServicio, fechaInicio, fechaFin, fechaEntregaEstimada, observacion, estado, 0);
                    }
            }
            return null;
        }
    }
}